In recent years, systems have been developed that provide services for users by making a server apparatus operate in a virtual environment to serve as multiple virtual machines (VMs). In such services, a server apparatus has one or more virtual machines operate on it, and each of the virtual machines runs an independent OS (Operating System) to operate application programs.
As a method of making a server apparatus operate in a virtual environment, there is a method that uses software called a “hypervisor” for executing multiple OSes in parallel. In this case, the hypervisor controls virtual machines, and manages the amounts of CPU (Central Processing Unit) resources allocated to the virtual machines.
When operating a server apparatus in a virtual environment, it is necessary to monitor overhead of virtualization by calculating a load of the system with multiple virtual machines. Overhead includes the load of the system itself and protocol processing, overall system load depending on individual performance including processing capability of hardware such as a server apparatus and a network device and system software such as an OS, and the like, which is load that weighs on the server apparatus other than intrinsic processing for services. If overhead is generated, for example, processing throughput drops and a response to a user operation slows down.
Therefore, a server apparatus providing a virtual environment needs a mechanism to monitor overhead. In this case, if a processing flow in a server apparatus can be visualized, overhead monitoring becomes easy.
Here, to visualize a processing flow in a server apparatus, it is necessary to identify an instruction under execution by a hypervisor or a virtual machine. For example, in case where multiple application programs are running on a single OS, it is necessary to identify which application program is being executed at the moment. A conventional method used for the case obtains trace information that summarizes instructions and instruction addresses executed by each application program in a chronological order. In this case, a space ID (Identification) is appended to the trace information that identifies a memory space where instructions in the trace information are executed. In addition, a program map is generated that includes a program name and a start address for each space ID. By associating trace information with program map information by the space ID, a program name currently executing instructions can be identified. In this way, it is possible to examine processing content and an execution time for each application program.